package com.spzx.product.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author GQS @Date 2024/9/26/16:24 @Description
 */
/**
 * Excel解析监听器类，用于处理Excel解析过程中的数据
 * 通过继承AnalysisEventListener<T>以覆盖其方法来实现监听功能
 *
 * @param <T> 泛型参数，表示Excel中每一行数据对应的Java对象类型
 */
public class ExcelListener<T> extends AnalysisEventListener<T> {

    // 可以通过实例获取该值
    private List<T> datas = new ArrayList<>();

    /**
     * 每解析一行数据就会调用一次该方法，用于处理解析出来的数据对象
     *
     * @param o               解析出来的数据对象
     * @param analysisContext 解析上下文，包含解析过程中的各种信息
     */
    @Override
    public void invoke(T o, AnalysisContext analysisContext) {
        datas.add(o);//数据存储到list，供批量处理，或后续自己业务逻辑处理。
    }

    /**
     * 获取解析出来的数据列表
     *
     * @return 数据列表
     */
    public List<T> getDatas() {
        return datas;
    }

    /**
     * excel解析完毕以后需要执行的代码，可用于进行一些后续处理工作
     *
     * @param analysisContext 解析上下文，包含解析过程中的各种信息
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // excel解析完毕以后需要执行的代码
    }

}

